package com.example;

/**
 * @Author loubobooo
 * @Description # 443. 压缩字符串
 * @Date 2022/04/11
 */
public class StringCompression {

    /**
     * 给你一个字符数组 chars ，请使用下述算法压缩：
     *
     * 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 ：
     *
     * 如果这一组长度为 1 ，则将字符追加到 s 中。
     * 否则，需要向 s 追加字符，后跟这一组的长度。
     * 压缩后得到的字符串 s 不应该直接返回 ，需要转储到字符数组 chars 中。需要注意的是，
     * 如果组长度为 10 或 10 以上，则在 chars 数组中会被拆分为多个字符。
     *
     * 请在 修改完输入数组后 ，返回该数组的新长度。
     *
     * 你必须设计并实现一个只使用常量额外空间的算法来解决此问题。
     *
     * 示例 1：
     *
     * 输入：chars = ["a","a","b","b","c","c","c"]
     * 输出：返回 6 ，输入数组的前 6 个字符应该是：["a","2","b","2","c","3"]
     * 解释："aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。
     * @param chars
     * @return
     */
    public int compress(char[] chars) {
        StringBuilder stringBuilder = new StringBuilder();
        char c = chars[0];
        int count = 1;
        for (int i = 1; i < chars.length; i++) {
            if(c == chars[i]){
                count++;
            }else{
                stringBuilder.append(c);
                if(count != 1){
                    stringBuilder.append(count);
                }
                c = chars[i];
                count = 1;
            }
        }
        stringBuilder.append(c);
        if(count != 1){
            stringBuilder.append(count);
        }
        String s = stringBuilder.toString();
        for (int i = 0; i < s.length(); i++) {
            chars[i] = s.charAt(i);
        }
        return s.length();
    }


    public static void main(String[] args) {
        StringCompression stringCompression = new StringCompression();
        stringCompression.compress(new char[]{'a'});
    }
}
